 
/***************************************************************************
* @file:audio.h 
* @author:   
* @date:  5,29,2019
* @brief:  音频编码相关函数头文件
* @attention:
***************************************************************************/
#ifndef _AUDIO_H
#define _AUDIO_H

#ifdef __cplusplus
extern "C"
{
#endif

/*---# Audio 输入输出部分--------------------------------------------------------*/
#define AI_DEVICE_ID 	1		//AI(MIC)设备号(ID)
#define AO_DEVICE_ID	0		//AO(speaker)设备号(ID)

#define AI_CHANNEL_ID 	0		//音频输入通道号(ID)
#define AO_CHANNEL_ID 	0		//音频输出通道号(ID)

/*---# Audio 编码部分------------------------------------------------------------*/
#define AENC_CHANNEL	0
/*---# Audio 解码部分------------------------------------------------------------*/
#define ADEC_CHANNEL	0

/*---#对讲部分-------------------------------------------------------------------*/
#define TALKBACK_FIFO_SIZE		(8*1024)	//对讲缓冲区大小

/*---#编码配置开关 1：使用G711编码; 0:使用AAC编码--------------------------------*/
#define USE_G711_AENC	0

/*******************************************************************************
*@ Description    :音频初始化函数
*@ Input          :
*@ Output         :
*@ Return         :成功：HLE_RET_OK ；失败 ： 错误码
*@ attention      :
*******************************************************************************/
int audio_init(void);

/*******************************************************************************
*@ Description    :创建“获取PCM编码帧”线程
*@ Input          :
*@ Output         :
*@ Return         :成功：HLE_RET_OK ；失败 ： 错误码
*@ attention      :
*******************************************************************************/
int audio_get_PCM_frame_task(void);

/*******************************************************************************
*@ Description    :创建“获取g711编码帧”线程
*@ Input          :
*@ Output         :
*@ Return         :成功：HLE_RET_OK ；失败 ： 错误码
*@ attention      :
*******************************************************************************/
int AENC_G711_get_frame_task(void);

/*******************************************************************************
*@ Description	  :创建“获取AAC编码帧”线程
*@ Input		  :
*@ Output		  :
*@ Return		  :成功：HLE_RET_OK ；失败 ： 错误码
*@ attention	  :
*******************************************************************************/
int AENC_AAC_get_frame_task(void);


/*******************************************************************************
*@ Description    :发送PCM音频数据到AO
*@ Input          :<buf>数据指针
					<size>数据大小
*@ Output         :
*@ Return         :成功：HLE_RET_OK ；失败 ： 错误码
*@ attention      :同一时间只能有一个地方调用
*******************************************************************************/
int audio_send_PCM_stream_to_speacker(void *buf,int size);


/*******************************************************************************
*@ Description    :解码一帧g711数据,并用speaker播放
*@ Input          :<buf_g711> g711数据
					<len> 数据长度
*@ Output         :
*@ Return         :成功：HLE_RET_OK ；失败 ： 错误码
*@ attention      :内部已经调用 audio_send_PCM_stream_to_speacker
*******************************************************************************/
int ADEC_G711_decode_frame_and_play(void*buf_g711,int len);


/*******************************************************************************
*@ Description    :退出音频编码
*@ Input          :
*@ Output         :
*@ Return         :成功：HLE_RET_OK ；失败 ： 错误码
*@ attention      :需要先停止对讲 talkback_stop
*******************************************************************************/
int audio_exit(void);


	 
#ifdef __cplusplus
}
#endif	 
	 
#endif












